﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entidades;

namespace Logica
{
    public class RutaBLL
    {
        public string NuevaRuta(RutaDTO Ruta)
        {
            try
            {
                justimeEntities bd = new justimeEntities();
                ruta tRuta = new ruta();
                tRuta.NomRuta = Ruta.NomRuta;
                tRuta.Descripcion = Ruta.Descripcion;
                tRuta.Distancia = Ruta.Distancia;
                tRuta.NumBuses = Ruta.NumBuses;
                tRuta.TiempoRecorrido = Ruta.TiempoRecorrido;
                bd.rutas.Add(tRuta);
                bd.SaveChanges();                
                return "ok";
            }
            catch (Exception e)
            {
                return "false";
            }
        }

        public string AsigPuntosRuta(PuntoDTO Punto, string NomRuta, int item)
        {
            justimeEntities bd2 = new justimeEntities();            
            coordenadasruta coor = new coordenadasruta();
            coor.NomRuta = NomRuta;
            coor.Latitud = Punto.lat;
            coor.Item = item;
            coor.Longitud = Punto.lon;
            bd2.coordenadasrutas.Add(coor);
            bd2.SaveChanges();            
            return "ok";
        }

        public List<RutaDTO> getRutas()
        {
            justimeEntities bd = new justimeEntities();
            List<RutaDTO> lrutas = new List<RutaDTO>();
            List<ruta> lrutaEnty = bd.rutas.ToList();
            foreach (ruta item in lrutaEnty)
            {
                RutaDTO ruta = new RutaDTO();
                ruta.NomRuta = item.NomRuta;
                ruta.Descripcion = item.Descripcion;
                ruta.Distancia = float.Parse(item.Distancia.ToString());
                ruta.TiempoRecorrido = float.Parse(item.TiempoRecorrido.ToString());
                ruta.NumBuses =  int.Parse(item.NumBuses.ToString());
                lrutas.Add(ruta);
            }
            return lrutas;
        }

        public List<CoordenadasRutaDTO> GetCoordenadasRuta(string NomRuta)
        {
            justimeEntities bd = new justimeEntities();
            List<coordenadasruta> lisCoord = bd.coordenadasrutas.Where(t => t.NomRuta == NomRuta).ToList();
            List<CoordenadasRutaDTO> lCoorR = new List<CoordenadasRutaDTO>();
            foreach(coordenadasruta item in lisCoord)
            {
                CoordenadasRutaDTO CoorR = new CoordenadasRutaDTO();
                CoorR.NomRuta = item.NomRuta;
                CoorR.item = item.Item;
                CoorR.lat = item.Latitud;
                CoorR.lon = item.Longitud;
                lCoorR.Add(CoorR);
            }
            return lCoorR;
        }

        public RutaDTO getRuta(string NomRuta)
        {
            justimeEntities bd = new justimeEntities();
            ruta Ruta = bd.rutas.Where(t => t.NomRuta == NomRuta).FirstOrDefault();
            RutaDTO Ruta2 = new RutaDTO();
            Ruta2.NomRuta = Ruta.NomRuta;
            Ruta2.Descripcion = Ruta.Descripcion;
            Ruta2.Distancia = float.Parse(Ruta.Distancia.ToString());
            Ruta2.TiempoRecorrido = float.Parse(Ruta.TiempoRecorrido.ToString());
            Ruta2.NumBuses = int.Parse(Ruta.NumBuses.ToString());
            return Ruta2;
        }

        public string EliminarRuta(string NomRuta)
        {
            justimeEntities bd = new justimeEntities();
            ruta Ruta = bd.rutas.Where(t => t.NomRuta == NomRuta).FirstOrDefault();
            if (Ruta != null)
            {
                List<coordenadasruta> CoorRuta = bd.coordenadasrutas.Where(r => r.NomRuta == NomRuta).ToList();
                if (CoorRuta != null)
                {
                    foreach (coordenadasruta item1 in CoorRuta)
                    {
                        bd.coordenadasrutas.Remove(item1);
                        bd.SaveChanges();
                    }
                }

                List<bus> movBuses = bd.buses.Where(v => v.Ruta == NomRuta).ToList();
                if (movBuses != null)
                {
                    foreach (bus item2 in movBuses)
                    {
                        item2.Ruta = "SIN RUTA";
                        bd.SaveChanges();
                    }
                }

                List<controlbus> ctrlBus = bd.controlbuses.Where(u => u.NomRuta == NomRuta).ToList();
                if (ctrlBus != null)
                {
                    foreach (controlbus item3 in ctrlBus)
                    {
                        bd.controlbuses.Remove(item3);
                        bd.SaveChanges();
                    }
                }

                bd.rutas.Remove(Ruta);
                bd.SaveChanges();
                return "true";
            }
            else
            {
                return "false";
            }
        }
    }
}
